home *** CD-ROM | disk | FTP | other *** search
/ Stone Design / Stone Design.iso / Stone_Friends / Wave / WavesWorld / Source / IBPalettes / WWTCLKit / WWSimpleString.m < prev    next >
Encoding:
Text File  |  1995-03-22  |  1.9 KB  |  114 lines

  1.  
  2. #import "WWSimpleString.h"
  3.  
  4. @implementation WWSimpleString
  5.  
  6. + initialize { return [WWSimpleString setVersion:1], self; }
  7.  
  8. - init
  9. {
  10.   [super init];
  11.   len = 0;
  12.   maxLen = 32;
  13.   str = (char *)NXZoneCalloc([self zone], 32, sizeof(char));
  14.   return self;
  15. }
  16.  
  17. - initWithStr:(const char *)newStr
  18. {
  19.   [self init];
  20.   return [self setStr:newStr];
  21. }
  22.  
  23. - free
  24. {
  25.   if (str) { NXZoneFree([self zone], str); }
  26.   return [super free];
  27. }
  28.  
  29.  
  30. - setStr:(const char *)newStr
  31. {
  32.   if (newStr)
  33.   { len = strlen(newStr);
  34.     while ((len+1) > maxLen)
  35.     {  maxLen *= 2;
  36.        str = (char *)NXZoneRealloc([self zone], str, maxLen);
  37.     }
  38.     str = NXCopyStringBuffer(newStr);
  39.   }
  40.   else
  41.   {  str = NULL;
  42.      len = 0;
  43.   }
  44.   return self;
  45. }
  46.  
  47. - (BOOL)sameAs:(const char *)aStr
  48. {
  49.   BOOL  ret;
  50.  
  51.  
  52.   if (aStr)
  53.   {  if (str) // passed in str isn't NULL; I'm not either
  54.      {  if (!strcmp(aStr, str))
  55.     {  ret = YES;
  56.         }
  57.         else
  58.     {  ret = NO;
  59.         }
  60.      }
  61.      else // passed in str isn't NULL; I am
  62.      {  ret = NO;
  63.      }
  64.   }
  65.   else
  66.   {  if (str) // passed in str is NULL; I'm not
  67.      {  ret = NO;
  68.      }
  69.      else // passed in str is NULL; I am too
  70.      {  ret = YES;
  71.      }
  72.   }
  73.   return ret;
  74. }
  75.  
  76. - (const char *)str {  return (const char *)str; }
  77.  
  78. #define typeVector "*"
  79. #define typeValues &str
  80.  
  81. - read:(NXTypedStream *)stream 
  82. {
  83.   int version;
  84.  
  85.  
  86.   [super read:stream];
  87.  
  88.   version = NXTypedStreamClassVersion(stream, "WWSimpleString");
  89.   if (version == 0) NXReadTypes(stream, "i", &version), version=1;
  90.   if (version == 1)
  91.   {  NXReadTypes(stream, typeVector, typeValues);
  92.      if (str) 
  93.      { len = strlen(str); 
  94.        maxLen = len + 1;
  95.      }     
  96.      else
  97.      {  str = (char *)NXZoneCalloc([self zone], 32, sizeof(char));
  98.         len = 0;
  99.         maxLen = 32;
  100.      }     
  101.   }
  102.   return self;
  103. }
  104.  
  105. - write:(NXTypedStream *)stream 
  106. {
  107.   [super write:stream];
  108.   NXWriteTypes(stream, typeVector, typeValues);
  109.   return self;
  110. }
  111.  
  112.  
  113. @end
  114.